package com.huaxin.device.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huaxin.device.dto.ResponseResult;
import com.huaxin.device.dto.request.AddDeviceInstanceReqDTO;
import com.huaxin.device.dto.request.QueryDeviceInstanceListReqDTO;
import com.huaxin.device.dto.request.UpdateDeviceInstanceReqDTO;
import com.huaxin.device.models.DeviceInstance;

public interface DeviceInstanceService extends IService<DeviceInstance> {
    /**
     * 添加设备实例
     *
     * @param in
     * @return
     */
    ResponseResult<String> addDeviceInstance(AddDeviceInstanceReqDTO in);

    /**
     * 删除设备实例
     *
     * @param id
     * @return
     */
    ResponseResult<String> deleteDeviceInstance(String id);

    /**
     * 修改设备实例
     *
     * @param in
     * @return
     */
    ResponseResult<String> updateDeviceInstance(UpdateDeviceInstanceReqDTO in);

    /**
     * 查询设备实例
     *
     * @param id
     * @return
     */
    DeviceInstance queryDeviceInstance(String id);

    //根据设备autoId查询设备实例
    DeviceInstance queryDeviceInstanceByAutoId(Long autoId);

    /**
     * 查询设备实例列表
     *
     * @return
     */
    ResponseResult<Page<DeviceInstance>> queryDeviceInstanceList(QueryDeviceInstanceListReqDTO in);

    /**
     * 根据设备sn查询设备信息
     *
     * @param sn 设备sn
     * @return 设备信息
     */
    ResponseResult<DeviceInstance> queryDeviceInstanceBySn(String sn);

    /**
     * 将设备与用户进行绑定
     *
     * @param sn         设备sn
     * @param customerId 用户ID
     * @param userType   用户类型 1-企业；2-家庭
     * @return 条码
     */
    ResponseResult<String> bindDevice(String sn, String customerId, Integer userType);

    /**
     * 将设备与用户进行解绑
     *
     * @param sn 设备sn
     * @return 解绑结果
     */
    ResponseResult<String> unbindDevice(String sn);

    /**
     * 分页查询某客户绑定的设备列表
     *
     * @param customerId 客户ID
     * @return 设备列表
     */
    ResponseResult<Page<DeviceInstance>> queryDeviceInstanceListByCustomerId(Integer pageNum, Integer pageSize, String customerId);

    /**
     * 分页查询区域下的设备列表
     *
     * @param zoneId 客户ID
     * @return 设备列表
     */
    ResponseResult<Page<DeviceInstance>> queryDeviceInstanceListByZoneId(Integer pageNum, Integer pageSize, String zoneId);

    /**
     * 获取视频播放地址
     *
     * @param serialNumber 设备序列号
     * @return 视频播放地址
     */
    ResponseResult<String> getVideoPlayUrl(String serialNumber);
}
